package com.fan.pojo;

/**
 * およそ神
 */
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * bean的后置处理器.
 * 分别在bean的初始化前后对bean对象提供自己的实例化逻辑
 * postProcessAfterInitialization：初始化之后对bean进行增强处理
 * postProcessBeforeInitialization：初始化之前对bean进行增强处理
 * 可以在applicationContext.xml中看到配置Bean后置处理器，不需要ID，
 * 只需要其全类名，因为IoC容器自动识别一个BeanPostProcessor
 */
public class MyBeanPostProcessor implements BeanPostProcessor {

   //对初始化之后的Bean进行处理
   //参数：bean：即将初始化的bean
   //参数：beanname：bean的名称
   //返回值：返回给用户的那个bean,可以修改bean也可以返回一个新的bean
   @Override
   public Object postProcessAfterInitialization(Object bean, String beanname) throws BeansException {
      Student stu = null;
      System.out.println("对初始化之后的Bean进行处理,将Bean的成员变量的值修改了");
      if("name".equals(beanname) || bean instanceof Student) {
         stu = (Student) bean;
         stu.setName("凡");
      }
      return stu;
   }
   //对初始化之前的Bean进行处理
   //参数：bean：即将初始化的bean
   //参数：beanname：bean的名称
   //返回值：返回给用户的那个bean,可以修改bean也可以返回一个新的bean
   //postProcessBeforeInitialization：初始化之前对bean进行增强处理
   @Override
   public Object postProcessBeforeInitialization(Object bean, String beanname) throws BeansException {
      System.out.println("对初始化之前的Bean进行处理,此时的名字"+bean);
      return bean;
   }

}

